傳統軟體開發是 規則 + 資料 = 答案:工程師寫好規則,程式吃資料吐答案。機器學習反過來,是 資料 + 答案 = 規則:給它大量輸入與對應答案,讓它自己歸納出規則(模型)。
但這裡有個陷阱:只在「看過的資料」上答對,並沒有意義。查表就能做到。機器學習的真正目標,是對沒見過的資料也答對。換句話說,我們要逼近的是產生資料的那個未知分佈,而不是記住訓練集。
設樣本空間為 X,標籤空間為 Y,資料來自未知的聯合分佈 P(X,Y)。
模型從假設空間 H 中挑選映射函數 f: X → Y,單樣本損失函數為:L(y, f(x))
模型的理論性能由 期望風險(泛化誤差)決定: R(f) = E[L(Y, f(X))]= ∫ L(y, f(x)) P(x, y) dx dy,其中積分範圍為 X × Y。
它衡量的是函數 f 在「整個真實世界」資料分佈上的平均表現。問題在於,P(X,Y) 客觀存在但完全未知,因此這個積分無法直接計算。
我們手上只有由獨立同分佈(i.i.d.)抽樣得到的訓練集: D = {(x₁,y₁),...,(xₙ,yₙ)}
因此以樣本平均近似期望值: Rₑₘₚ(f) = (1/N) Σᵢ₌₁ᴺ L(yᵢ,f(xᵢ)),並以 經驗風險最小化(ERM) 作為學習準則: min₍f∈H₎ Rₑₘₚ(f)。根據大數法則,對於 固定的 f,當 N → ∞ 時,Rₑₘₚ(f) → Rₑₓₚ(f)(依機率收斂)。
看起來很美好,但請特別注意「固定的」這三個字。
ERM 是在 看過資料之後 才挑選函數 f,而挑中的正是在這份訓練資料上碰巧表現最好的那個。
因此,這樣選出的 f,其經驗風險往往會偏低,大數法則便無法直接保證它的泛化能力。
以最簡單的情況為例:
根據 Hoeffding 不等式(Hoeffding Inequality)與聯集上界,以至少 1 − δ 的機率,H 中 所有 函數 f 同時滿足:
R_exp(f) ≤ R_emp(f) + √((ln|H| + ln(1/δ)) / (2N))
右側第二項稱為經驗風險與真實風險之間的誤差上界,它揭露了兩個重要現象:
因此,當 N 有限而 H 的容量過大時,例如:
總能找到某個函數 f,使訓練誤差幾乎降到 0,但在未看過的資料上表現很差。
這種現象稱為 過擬合(Overfitting)。
最極端的例子是「查表學習」:
模型只是記住了所有訓練樣本,卻沒有真正學到資料背後的規律。
對於無限大的假設空間,理論上無法再直接使用 ln|H| 來衡量模型複雜度,因此會改用:
等容量度量(Capacity Measure)取代。
雖然數學工具不同,但得到的核心結論完全一致:
模型越複雜,若沒有足夠的資料或適當的限制,越容易發生過擬合,導致訓練誤差很低而泛化誤差很高。
既然問題來自模型容量過大,那麼除了考慮訓練誤差之外,也應將模型複雜度納入優化目標:
R_srm(f) = R_emp(f) + λ · Ω(f)
其中:
λ 的大小反映了對模型複雜度的容忍程度:
常見的複雜度懲罰包括:
嚴格來說,Vapnik 提出的結構風險最小化並不只是加入一個懲罰項,而是在一系列巢狀假設空間中進行模型選擇:
H₁ ⊂ H₂ ⊂ H₃ ⊂ ...
每個假設空間都具有不同的模型容量,再根據理論泛化誤差上界選擇最適合的模型。
不過在實務上,SRM 最常見的表現形式就是各種正則化方法,因此通常寫成:
R_srm(f) = R_emp(f) + λ · Ω(f)
這其實就是 奧坎剃刀(Occam's Razor) 的數學化表達:
在解釋能力相近的情況下,應優先選擇較簡單的模型。
然而,「較簡單的模型比較好」本身其實是一種預設立場。
為什麼我們有理由偏好簡單模型?
為什麼較複雜的模型不一定更接近真實世界?
這個問題將在下一篇介紹的 沒有免費午餐定理 中得到更深刻的回答。
source: https://github.com/datawhalechina/pumpkin-book/releases#release-v2.0.0